home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / asms.arc / FFT.ASM < prev    next >
Encoding:
Assembly Source File  |  1987-08-12  |  6.2 KB  |  542 lines

  1. ; FFT    
  2.     
  3. ;    SYMBOLIC NAMES FOR DATA MEMORY LOCATIONS
  4. ;
  5. XLEND:    equ 0
  6. ONE:    equ 1
  7. NT:    equ 2
  8. NH:    equ 3
  9. NQ:    equ 4
  10. M:    equ 5
  11. IT:    equ 6
  12. ID:    equ 7
  13. IR:    equ 8
  14. IU:    equ 9
  15. I:    equ 10
  16. J:    equ 11
  17. ND:    equ 12
  18. L:    equ 13
  19. XRQ:    equ 14
  20. XIQ:    equ 15
  21. XRP:    equ 16
  22. XIP:    equ 17
  23. COS:    equ 18
  24. SIN:    equ 19
  25. TEMP1:    equ 20
  26. TEMP2:    equ 21
  27. TEMP3:    equ 22
  28. TEMP4:    equ 23
  29. K:    equ 24
  30. TABPTR:    equ 25
  31. ALOCPTR: equ 26
  32. ;         BLOCPTR    equ 27
  33. DIFF:    equ 28
  34. ;
  35. ;
  36. ;    VECTORS
  37. ;
  38.     ORG 0
  39.     B    RESET1    ;RESET VECTOR
  40. INT1:    B    INT1    ;INTERRUPT VECTOR
  41. ;
  42. ;    POINTERS
  43. ;
  44. XLEN:    DW    1024    ;ADDR OF FFT SIZE
  45.  
  46. TABLE:            ; SINE TABLE
  47.     DW 00H
  48.     DW 0C9H
  49.     DW 0192H
  50.     DW 025BH
  51.     DW 0324H
  52.     DW 03EDH
  53.     DW 04B6H
  54.     DW 057EH
  55.     DW 0647H
  56.     DW 0710H
  57.     DW 07D9H
  58.     DW 08A2H
  59.     DW 096AH
  60.     DW 0A33H
  61.     DW 0AFBH
  62.     DW 0BC3H
  63.     DW 0C8BH
  64.     DW 0D53H
  65.     DW 0E1BH
  66.     DW 0EE3H
  67.     DW 0FABH
  68.     DW 01072H
  69.     DW 01139H
  70.     DW 01201H
  71.     DW 012C8H
  72.     DW 0138EH
  73.     DW 01455H
  74.     DW 0151BH
  75.     DW 015E2H
  76.     DW 016A8H
  77.     DW 0176DH
  78.     DW 01833H
  79.     DW 018F8H
  80.     DW 019BDH
  81.     DW 01A82H
  82.     DW 01B47H
  83.     DW 01C0BH
  84.     DW 01CCFH
  85.     DW 01D93H
  86.     DW 01E56H
  87.     DW 01F19H
  88.     DW 01FDCH
  89.     DW 0209FH
  90.     DW 02161H
  91.     DW 02223H
  92.     DW 022E5H
  93.     DW 023A6H
  94.     DW 02467H
  95.     DW 02528H
  96.     DW 025E8H
  97.     DW 026A8H
  98.     DW 02767H
  99.     DW 02826H
  100.     DW 028E5H
  101.     DW 029A3H
  102.     DW 02A61H
  103.     DW 02B1FH
  104.     DW 02BDCH
  105.     DW 02C98H
  106.     DW 02D55H
  107.     DW 02E11H
  108.     DW 02ECCH
  109.     DW 02F87H
  110.     DW 03041H
  111.     DW 030FBH
  112.     DW 031B5H
  113.     DW 0326EH
  114.     DW 03326H
  115.     DW 033DEH
  116.     DW 03496H
  117.     DW 0354DH
  118.     DW 03604H
  119.     DW 036BAH
  120.     DW 0376FH
  121.     DW 03824H
  122.     DW 038D8H
  123.     DW 0398CH
  124.     DW 03A40H
  125.     DW 03AF2H
  126.     DW 03BA5H
  127.     DW 03C56H
  128.     DW 03D07H
  129.     DW 03DB8H
  130.     DW 03E68H
  131.     DW 03F17H
  132.     DW 03FC5H
  133.     DW 04073H
  134.     DW 04121H
  135.     DW 041CEH
  136.     DW 0427AH
  137.     DW 04325H
  138.     DW 043D0H
  139.     DW 0447AH
  140.     DW 04524H
  141.     DW 045CDH
  142.     DW 04675H
  143.     DW 0471CH
  144.     DW 047C3H
  145.     DW 04869H
  146.     DW 0490FH
  147.     DW 049B4H
  148.     DW 04A58H
  149.     DW 04AFBH
  150.     DW 04B9DH
  151.     DW 04C3FH
  152.     DW 04CE0H
  153.     DW 04D81H
  154.     DW 04E21H
  155.     DW 04EBFH
  156.     DW 04F5EH
  157.     DW 04FFBH
  158.     DW 05097H
  159.     DW 05133H
  160.     DW 051CEH
  161.     DW 05269H
  162.     DW 05302H
  163.     DW 0539BH
  164.     DW 05432H
  165.     DW 054CAH
  166.     DW 05560H
  167.     DW 055F5H
  168.     DW 0568AH
  169.     DW 0571DH
  170.     DW 057B0H
  171.     DW 05842H
  172.     DW 058D4H
  173.     DW 05964H
  174.     DW 059F3H
  175.     DW 05A82H
  176.     DW 05B10H
  177.     DW 05B9DH
  178.     DW 05C29H
  179.     DW 05CB4H
  180.     DW 05D3EH
  181.     DW 05DC7H
  182.     DW 05E4FH
  183.     DW 05ED7H
  184.     DW 05F5EH
  185.     DW 05FE3H
  186.     DW 06068H
  187.     DW 060ECH
  188.     DW 0616FH
  189.     DW 061F0H
  190.     DW 06271H
  191.     DW 062F1H
  192.     DW 06371H
  193.     DW 063EFH
  194.     DW 0646CH
  195.     DW 064E8H
  196.     DW 06563H
  197.     DW 065DDH
  198.     DW 06657H
  199.     DW 066CFH
  200.     DW 06746H
  201.     DW 067BDH
  202.     DW 06832H
  203.     DW 068A6H
  204.     DW 06919H
  205.     DW 0698CH
  206.     DW 069FDH
  207.     DW 06A6DH
  208.     DW 06ADCH
  209.     DW 06B4AH
  210.     DW 06BB8H
  211.     DW 06C24H
  212.     DW 06C8FH
  213.     DW 06CF9H
  214.     DW 06D62H
  215.     DW 06DCAH
  216.     DW 06E30H
  217.     DW 06E96H
  218.     DW 06EFBH
  219.     DW 06F5EH
  220.     DW 06FC1H
  221.     DW 07023H
  222.     DW 07083H
  223.     DW 070E2H
  224.     DW 07141H
  225.     DW 0719EH
  226.     DW 071FAH
  227.     DW 07255H
  228.     DW 072AFH
  229.     DW 07307H
  230.     DW 0735FH
  231.     DW 073B5H
  232.     DW 0740BH
  233.     DW 0745FH
  234.     DW 074B2H
  235.     DW 07504H
  236.     DW 07555H
  237.     DW 075A5H
  238.     DW 075F4H
  239.     DW 07641H
  240.     DW 0768EH
  241.     DW 076D9H
  242.     DW 07723H
  243.     DW 0776CH
  244.     DW 077B4H
  245.     DW 077FAH
  246.     DW 07840H
  247.     DW 07884H
  248.     DW 078C7H
  249.     DW 07909H
  250.     DW 0794AH
  251.     DW 0798AH
  252.     DW 079C8H
  253.     DW 07A05H
  254.     DW 07A42H
  255.     DW 07A7DH
  256.     DW 07AB6H
  257.     DW 07AEFH
  258.     DW 07B26H
  259.     DW 07B5DH
  260.     DW 07B92H
  261.     DW 07BC5H
  262.     DW 07BF8H
  263.     DW 07C29H
  264.     DW 07C5AH
  265.     DW 07C89H
  266.     DW 07CB7H
  267.     DW 07CE3H
  268.     DW 07D0FH
  269.     DW 07D39H
  270.     DW 07D62H
  271.     DW 07D8AH
  272.     DW 07DB0H
  273.     DW 07DD6H
  274.     DW 07DFAH
  275.     DW 07E1DH
  276.     DW 07E3FH
  277.     DW 07E5FH
  278.     DW 07E7FH
  279.     DW 07E9DH
  280.     DW 07EBAH
  281.     DW 07ED5H
  282.     DW 07EF0H
  283.     DW 07F09H
  284.     DW 07F21H
  285.     DW 07F38H
  286.     DW 07F4DH
  287.     DW 07F62H
  288.     DW 07F75H
  289.     DW 07F87H
  290.     DW 07F97H
  291.     DW 07FA7H
  292.     DW 07FB5H
  293.     DW 07FC2H
  294.     DW 07FCEH
  295.     DW 07FD8H
  296.     DW 07FE1H
  297.     DW 07FE9H
  298.     DW 07FF0H
  299.     DW 07FF6H
  300.     DW 07FFAH
  301.     DW 07FFDH
  302.     DW 07FFFH
  303.     DW 07FFFH
  304.  
  305. ;
  306.     ORG    200H
  307. ALOC:            ; REAL PART
  308. ;
  309.     ORG    600H
  310. BLOC:            ; IMAGINARY
  311.     ORG    0A00H    
  312. ;    PROGRAM
  313. RESET1:
  314.     ; LEAVE SOME ROOM HERE
  315.     LDPK    0
  316.     ZAC        ; 73
  317.     SACL     ONE,0
  318.     OUT    ONE,7    ; tell 8088 we're starting
  319.  
  320.  
  321.     LDPK    0
  322.     LACK    1
  323.     SACL     ONE,0
  324.     LT     ONE
  325.     MPYK    XLEN
  326.     PAC
  327.     TBLR    XLEND
  328.     LAC    XLEND,0
  329.     SUB    ONE,0
  330.     SACL    NT,0
  331.     LAC    XLEND,15
  332.     SACH    NH,0
  333.     LAC    XLEND,14
  334.     SACH    NQ,0
  335.     ;
  336.     ;    POINTER INITIALIZATION
  337.     LT    ONE
  338.     MPYK    TABLE
  339.     PAC
  340.     SACL    TABPTR,0    ; TABLE PTR
  341.     MPYK    ALOC
  342.     PAC
  343.     SACL    ALOCPTR,0        ; REALS PTR
  344.     MPYK    BLOC
  345.     PAC    
  346. ;    SACL    BLOCPTR,0    ; IMAG PTR
  347.     SUB    ALOCPTR,0
  348.     SACL    DIFF,0        ; BLOC - ALOC
  349.     ;
  350.     ;    BITREV
  351.     ;
  352.     ZAC
  353.     SACL    I,0
  354.     SACL    J,0
  355. LAB0:    ZALS    NT
  356.     SUB    ONE,1
  357.     SUB    I,0
  358.     BLZ    LAB03
  359.         ZALS    J
  360.         SUB    I,0
  361.         BLEZ    LAB01
  362.             LAC    ALOCPTR,0
  363.             ADD    J,0
  364.             TBLR    TEMP1
  365.             ADD    DIFF,0
  366.             TBLR    TEMP3
  367.             LAC    ALOCPTR,0
  368.             ADD    I,0
  369.             TBLR    TEMP2
  370.             ADD    DIFF,0
  371.             TBLR    TEMP4
  372.             LAC    ALOCPTR,0
  373.             ADD    J,0
  374.             TBLW    TEMP2
  375.             ADD    DIFF,0
  376.             TBLW    TEMP4
  377.             LAC    ALOCPTR,0
  378.             ADD    I,0
  379.             TBLW    TEMP1
  380.             ADD    DIFF,0
  381.             TBLW    TEMP3
  382. LAB01:        LAC    NH,0
  383.         SACL    K,0
  384. LAB02:        LAC    J,0
  385.         SUB    K,0
  386.         BLZ    LAB025    
  387.             SACL    J,0
  388.             LAC    K,15
  389.             SACH    K,0
  390.             B    LAB02
  391. LAB025:        LAC    J,0
  392.         ADD    K,0
  393.         SACL    J,0
  394.     ZALS    I
  395.     ADD    ONE,0
  396.     SACL    I,0
  397.     B    LAB0
  398. LAB03:
  399.  
  400.  
  401.  
  402.     
  403.     ;
  404.     ;
  405.     ZAC
  406.     SACL    M,0
  407.     SACL    IT,0
  408.     LACK    1
  409.     SACL    ID,0
  410.     SACL    IR,0
  411.  
  412.     LAC    NQ,1
  413.     SACL    IU,0
  414.  
  415. BEGIN:
  416.     LAC    ID,0
  417.     SACL    I,0
  418.     ADD    ID,0
  419.     SACL    ID,0
  420.     ZAC
  421.     SACL    J,0
  422.  
  423. LAB1:
  424.     LAC    I,0
  425.     SUB    J,0
  426.     BLEZ    LAB5
  427.     LAC     TABPTR,0
  428.     ADD    M,0
  429.     TBLR    SIN
  430.     LAC    TABPTR,0
  431.     ADD    NQ,0
  432.     SUB    M,0
  433.     TBLR    COS
  434.     LAC    J,0
  435.     SUB    IR,0
  436.     BLZ    LAB2
  437.     LAC    M,0
  438.     SUB    IT,0
  439.     SACL    M,0
  440.     ZAC
  441.     SUB    COS,0
  442.     SACL    COS,0
  443.     B    LAB3
  444.  
  445. LAB2:
  446.     LAC    M,0
  447.     ADD    IT,0
  448.     SACL    M,0
  449.  
  450. LAB3:
  451.     LAC    J,0
  452.     SACL    ND,0
  453.  
  454. LAB4:
  455.     LAC    NT,0
  456.     SUB    ND,0
  457.     BLZ    LAB45
  458.     LAC    I,0
  459.     ADD    ND,0
  460.     SACL    L,0
  461.     LAC    ALOCPTR,0
  462.     ADD    L,0
  463.     TBLR    XRQ
  464.     ADD    DIFF,0            
  465.     TBLR    XIQ
  466.     LAC    ALOCPTR,0
  467.     ADD    ND,0
  468.     TBLR    XRP
  469.     ADD    DIFF,0            
  470.     TBLR    XIP
  471.     ;
  472.     ;
  473.     ;
  474.     ; BUTTERFLY
  475.     ;
  476.     ZAC
  477.     LT    COS
  478.     MPY     XRQ
  479.     LTA    SIN
  480.     MPY    XIQ
  481.     LTA    COS    
  482.     SACH    TEMP1,0
  483.     ZAC
  484.     MPY    XIQ
  485.     LTA    SIN
  486.     MPY    XRQ
  487.     SPAC
  488.     SACH    TEMP2,0
  489.     ;
  490.     LAC    XRP,14
  491.     ADD    TEMP1,15
  492.     SACH    XRP,1
  493.     SUBH    TEMP1
  494.     SACH    XRQ,1
  495.  
  496.     LAC    XIP,14
  497.     ADD    TEMP2,15
  498.     SACH    XIP,1
  499.     SUBH    TEMP2
  500.     SACH    XIQ,1
  501.     ;
  502.     ;    END OF BUTTERFLY
  503.     ;
  504.     LAC    ALOCPTR,0
  505.     ADD    L,0
  506.     TBLW    XRQ
  507.     ADD    DIFF,0
  508.     TBLW     XIQ
  509.     LAC    ALOCPTR,0
  510.     ADD    ND,0
  511.     TBLW    XRP
  512.     ADD    DIFF,0            
  513.     TBLW    XIP
  514.  
  515.     LAC    ND,0
  516.     ADD    ID,0
  517.     SACL    ND,0
  518.     B    LAB4
  519.  
  520. LAB45:
  521.     LAC    J,0
  522.     ADD    ONE,0
  523.     SACL    J,0
  524.     B    LAB1
  525.  
  526. LAB5:
  527.     LAC    I,0
  528.     SACL    IR,0
  529.     LAC    IU,15
  530.     SACH    IU,0
  531.     SACH    IT,0
  532. LAB6:
  533.     LAC    NH,0
  534.     SUB    I,0
  535.     BGZ    BEGIN
  536. ;    CALL    SPECT
  537.     LACK    99        ; 88
  538.     SACL     ONE,0
  539.     OUT    ONE,7    ; tell 8088 we're done
  540.  
  541. LOOP:    B    LOOP
  542.